﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using CRM.Objetos;

namespace CRM.CapaDatos
{
    public class DAOUsuario
    {
        /// <summary>
        /// Variable para almacenar la cadena de conexion
        /// </summary>
        string cadenaConexion = string.Empty;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="cadena">Cadena de Conexion</param>
        public DAOUsuario(string cadena)
        {
            cadenaConexion = cadena;
        }

        /// <summary>
        /// Metodo que lista usuarios
        /// </summary>
        /// <returns>Lista de usuarios</returns>
        public List<Usuario> ListarUsuarios()
        {            
            IDbConnection con = GenericProvider.CreateConnection(cadenaConexion);
            IDbCommand com = GenericProvider.CreateStoredProcedure(con, "LISTAR_USUARIOS");

            con.Open();
            IDataReader drUsuarios = com.ExecuteReader();
            List<Usuario> listaUsuarios = new List<Usuario>();

            while (drUsuarios.Read())
            {
                listaUsuarios.Add(ConstruirUsuario(drUsuarios));
            }

            drUsuarios.Close();
            con.Close();
            return listaUsuarios;
        }

        /// <summary>
        /// Metodo que construye un objeto usuario a partir de un cursor
        /// </summary>
        /// <param name="drUsuarios">Cursor de base de datos</param>
        /// <returns></returns>
        private Usuario ConstruirUsuario(IDataReader drUsuarios)
        {
            Usuario obj = new Usuario();
            obj.Id = drUsuarios.GetInt32(0);
            obj.Nombre = drUsuarios.GetString(1);
            obj.Password = drUsuarios.GetString(2);
            return obj;
        }

        /// <summary>
        /// Metodo que inicia sesion
        /// </summary>
        /// <param name="usuario">Usuario</param>
        /// <param name="password">Contrasena</param>
        /// <returns>Verdadero si el usuario existe</returns>
        public bool IniciarSesion(string usuario, string password)
        {
            IDbConnection con = GenericProvider.CreateConnection(cadenaConexion);
            IDbCommand com = GenericProvider.CreateStoredProcedure(con, "INICIAR_SESION");            

            IDbDataParameter userName = GenericProvider.CreateParameter(com, "i_username", usuario);
            IDbDataParameter userPass = GenericProvider.CreateParameter(com, "i_userpass", password);
            com.Parameters.Add(userName);
            com.Parameters.Add(userPass);

            con.Open();
            bool retVal = false;
            IDataReader dr = com.ExecuteReader();            

            if (dr != null && dr.Read())
            {
                dr.Close();
                retVal = true;
            }

            con.Close();
            return retVal;
        }
    }
}
